Distributed applications, by nature of being distributed, may divide up tasks, problems, or operations among different distributed components of a distributed system. Such distribution offers several advantages. Complex or computing resource intensive tasks may be divided up among multiple low-end computing systems, instead of relying upon a more expensive, monolithic system. The number of computing systems that make up a distributed system for distributed application may be more easily scaled up or down to reflect changing needs for distributed applications. Distributed systems may also be beneficial when the nature of the tasks performed by an operation, such as where data is generated in one location, and process, stored, or analyzed in another, are physically distributed.
The advantages afforded by dividing up operations, tasks, or problems in distributed applications may be blunted by the complications distributed applications can create. Consistency among distributed system components, for instance, may be necessary in order to correctly perform a given task. Techniques for consistency have been achieved in different ways. Some distributed systems opt for a synchronous communication model, where all distributed components are brought to the same point of agreement before making progress in an operation. While other distributed systems implement asynchronous communication models, which may allow for different distributed system components to make progress in performing an operation at different states, as long as consistency may be eventually be achieved. For certain types of distributed applications operating in unreliable communication environments, asynchronous communication may offer a more dependable way to perform distributed operations.
Various solutions and techniques for maintaining consistency in a distributed system implementing asynchronous distributed applications while still making progress have been developed. As distributed applications grow in popularity, such as in response to greater numbers of computing systems capable of communicating over a network like the Internet, providing access to many different computing services, the efficiency and accessibility of implementing of these solutions and techniques becomes more important. However, such techniques are often complex and, thus, difficult to implement without relevant expertise, increasing the demand for less complicated and more accessible consistency solutions in order to implement distributed applications.
While embodiments are described herein by way of example for several embodiments and illustrative drawings, those skilled in the art will recognize that the embodiments are not limited to the embodiments or drawings described. It should be understood, that the drawings and detailed description thereto are not intended to limit embodiments to the particular form disclosed, but on the contrary, the intention is to cover all modifications, equivalents and alternatives falling within the spirit and scope as defined by the appended claims. The headings used herein are for organizational purposes only and are not meant to be used to limit the scope of the description or the claims. As used throughout this application, the word “may” is used in a permissive sense (i.e., meaning having the potential to), rather than the mandatory sense (i.e., meaning must). Similarly, the words “include”, “including”, and “includes” mean including, but not limited to.